home *** CD-ROM | disk | FTP | other *** search
- /* モーションブラー?
- */
-
- #include <iocslib.h>
-
-
- enum {
- GS_NULL,
- GS_EXIT,
- GS_MAKE,
- GS_PLAY
- };
- int global_step;
-
- #define MAX_ANIM (20)
- int MAX_PICNUM; //PICファイルの最終番号
-
- unsigned short g_buf[MAX_ANIM][256*256]; //元データ格納
- unsigned short fr_buf[256*256]; //画面出力用
-
- int ANIMS=15; //アニメの枚数
- int now_frame; //現在のフレーム番号0~(ANIMS-1)
-
- int vram_page=0; //現在表示中のVRAM(仮想)ページ0,1
-
- int Sync()
- {
- unsigned short *v,*s;
- int np;
- int ssp;
- short x,y;
-
- // np=(vram_page==0)?1:0;
- np=0;
- v=(unsigned short *)(0xC00000+np*0x040000);
- s=fr_buf;
- ssp=B_SUPER(0);
- for( y=0; y<256; y++ ){
- for( x=0; x<256; x++ ){
- *v++=*s++;
- }
- v+=256;
- }
- B_SUPER(ssp);
-
- HOME(0,0,np*256);
- vram_page=np;
-
- return(0);
- }
-
-
-
- int Make()
- {
- #define OV_FRAMES (4) //重ね会わせを行うフレーム数
- unsigned short level[OV_FRAMES]; //重ね会わせレベル
- unsigned short r[OV_FRAMES],g[OV_FRAMES],b[OV_FRAMES];
- unsigned short *s[OV_FRAMES],*d;
- unsigned int mr,mg,mb;
- short x,y,f;
- unsigned char loadname[256];
-
-
- printf("%02d\x0d",now_frame);
-
- //合計で4096に
- // level[0]=2560; level[1]= 768; level[2]= 512; level[3]= 256; //@@4番目がほとんど反映されない
- // level[0]=1536; level[1]=1024; level[2]= 896; level[3]= 640; //割と普通?
- level[0]=2048; level[1]=384; level[2]= 640; level[3]=1024; //MATRIXっぽい?
- // level[0]=1024; level[1]=1024; level[2]=1024; level[3]=1024; //全平均
-
-
- MAX_PICNUM=20;
- for( f=0; f<OV_FRAMES; f++ ){
- sprintf(loadname,"M:TEST%03d.PIC",((now_frame-1-f+MAX_PICNUM)%MAX_PICNUM)+1 );
- printf(loadname);
- Expand_DogaPic(loadname,g_buf[f]);
- s[f]=g_buf[f];
- }
- cls();
- d=fr_buf;
-
- //もーしょんブラー本体
- for( y=0; y<256; y++ ){ ; for( x=0; x<256; x++ ){
- for( f=0; f<OV_FRAMES; f++ ){
- r[f]=((*s[f]>>6)&0x1f);
- g[f]=((*s[f]>>11)&0x1f);
- b[f]=((*s[f]>>1)&0x1f);
- s[f]++;
- }
- mr=0; mg=0; mb=0;
- for( f=0; f<OV_FRAMES; f++ ){
- mr+=(r[f]*level[f]);
- mg+=(g[f]*level[f]);
- mb+=(b[f]*level[f]);
- }
- mr>>=12;
- mg>>=12;
- mb>>=12;
- *d++=((mr<<6)|(mg<<11)|(mb<<1));
- }}
-
-
- #undef OV_FRAMES
-
- quick_exit:
- return(0);
- }
-
-
-
-
-
- int Save()
- {
- // unsigned char savename[256];
- unsigned char comline[256];
-
-
- sprintf(comline,"save OUT%03d.PIC",now_frame);
- system(comline);
- }
-
-
-
- #if 0
- int Play()
- {
- unsigned short *s,*d;
- short x,y;
-
- s=o_buf[now_frame%MAX_ANIM];
- d=fr_buf;
-
- printf("%02d\x0d",now_frame);
-
- for( y=0; y<256; y++ ){
- for( x=0; x<256; x++ ){
- *d++=*s++;
- }
- }
- now_frame++;
- if( now_frame>MAX_ANIM ){
- now_frame=0;
- }
-
- quick_exit:
- return(0);
- }
- #endif
-
-
-
- int Idle()
- {
- switch( global_step ){
- case GS_MAKE: Make(); break;
- // case GS_PLAY: Play(); break;
- }
-
- if( BITSNS(0x00)==0x02 ){
- global_step=GS_EXIT;
- KFLUSHIO(0xff);
- }
-
- return(0);
- }
-
-
-
-
- int Init(argc,argv)
- int argc;
- char *argv[];
- {
- global_step=GS_MAKE;
- // screen(1,3,1,1);
- screen(0,3,1,1);
-
- now_frame=1;
-
- return(0);
- }
-
-
-
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- Init(argc,argv);
- while( global_step!=GS_EXIT ){
- Idle();
- Sync();
- Save();
- now_frame++;
- if( now_frame>MAX_ANIM ){
- break; //終わり
- // now_frame=0;
- // global_step=GS_PLAY;
- }
- }
- }
-
-
- /* [ EOF ] */
-
-